// 这个文件会帮我们打包 packages下的模块 最终打包出js文件


// node dev.js 要打包的名字 -f 打包的格式

import minimist from "minimist";
import { resolve, dirname } from "path";
import { fileURLToPath } from "url";
import esbuild from "esbuild"
import { createRequire } from "module";

const args = minimist(process.argv.slice(2));

// esm使用commonjs变量
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename)
const target = args._[0] || "reactivity" // 打包哪个项目
const format = args.f || "iife" // 打包后的模块化规范
const require = createRequire(import.meta.url)

// 入口文件
const entry = resolve(__dirname, `../packages/${target}/src/index.ts`)
const pkg = require(`../packages/${target}/package.json`)

// 根据需要进行打包
esbuild.context({
    entryPoints: [entry],
    bundle: true, // reactivity -> shared 会打包到一起
    outfile: resolve(__dirname, `../packages/${target}/dist/${target}.js`),
    platform: "browser", // 打包成浏览器的代码
    sourcemap: true, // 可以调试源代码
    format, // cjs esm iife
    globalName: pkg.buildOptions?.name
}).then((ctx) => {
    console.log(`start dev ${target}`)

    return ctx.watch() // 监听文件变化
})